/**
*
QuickUML; A simple UML tool that demonstrates one use of the
Java Diagram Package
Copyright (C) 2001 Eric Crahen <crahen@cse.buffalo.edu>
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
package uml.builder;
import java.util.Iterator;
import java.util.NoSuchElementException;
/**
* @class MetaConstructor
*
* @date 08-20-2001
* @author Eric Crahen
* @version 1.0
*
* This class represents a methods contract - its name, its parameters, return type
* and its exceptions.
*
*/
public class MetaConstructor extends MetaMethod {
private MetaAttribute[] associations;
private MetaAttribute[] compositions;
/**
* Create a default constructor
*/
public MetaConstructor() {
this(null, null);
}
/**
* Create a constructor based on a set of attributes that should be assigned values
* from parameters, and a set of attributes that should be initialized with thier
* default constructors.
*/
public MetaConstructor(MetaAttribute[] associations, MetaAttribute[] compositions) {
// Create the signature
super("public void <init>()");
if(associations != null)
initParameters(associations);
this.associations = associations;
this.compositions = compositions;
}
public void initParameters(MetaAttribute[] associations) {
for(int i=0; i<associations.length; i++)
addParameter(new MetaParameter(associations[i].getType() + " " + associations[i].getName()));
}
public Iterator getAssociations() {
return getAttributeIterator(associations);
}
public Iterator getCompositions() {
return getAttributeIterator(compositions);
}
/**
* Get an Iterator over a set of attributes
*/
private final Iterator getAttributeIterator(MetaAttribute[] attr) {
final MetaAttribute[] array = attr;
return new Iterator() {
int n = 0;
public boolean hasNext() {
return array != null && n < array.length;
}
public Object next() {
if(!hasNext())
throw new NoSuchElementException();
return array[n++];
}
public void remove() {}
};
}
}